iT邦幫忙

2021 iThome 鐵人賽

DAY 3
0
DevOps

k8s新手船長船難記系列 第 3

[DAY3]K8S元件初探-Control Plane Components

  • 分享至 

  • xImage
  •  

控制平面元件(Control Plane Components)

來人阿,先上個架構圖

圖片來源 官網

從架構圖上面看的出來,Control Plane Components整個k8s叢集最核心的模組。
大概跟人類的大腦一樣的概念,進行發號施令的機構,像是調度POD阿,重啟POD,或是scale POD等等行為,關於POD,後面會寫篇文章介紹。
它主要是由下面幾個元件組成,因為這部份有點硬....,所以就用重點的方法介紹為主:

  • kube-apiserver:

    提供Kubernetes API,包括認證授權、數據校驗以及集群狀態變更等,供用戶端及其他元件調用;
    代理集群中的一些附加元件元件,如 Kubernetes UI、metrics-server、npd 等;
    創建 kubernetes 服務,即提供 apiserver 的 Service,kubernetes Service;
    資源在不同版本之間的轉換;

    kube-apiserver 使用 REST API,支援httphttps,因為http安全性低,建議還是以https為主,不管https或是http,api格式都相同。
    目前k8s套件或是工具都是使用REST API跟k8s取得資料,如果有使用 client-go套件跟k8s取資料時就知道,它本身都是打REST API /images/emoticon/emoticon01.gif
    -- 資料來源kube-apiserver 的设计与实现
    -- kube-apiserver細部說明API Server

  • etcd:
    分散式key-value資料庫,儲存k8s的網路設置和pod的狀態資料

  • kube-scheduler:
    負責調度cluster裡面的pod,根據可用資源,把pod分配到對應的node上面。
    kube-scheduler在調度pod時,會依據下面狀態,後面會再說明一下親和力(affinity 和 anti-affinity),在進行特定服務調度到指定node時用到

    • 公平調度
    • 資源高效利用
    • Qos(Quality of Service) (會再說明)
    • 親和力(affinity 和 anti-affinity) (會再說明)
    • 資料本地化(data locality)
    • 內部負載干擾(inter-workload interference)
    • deadlines

    -- 資料來源kube-scheduler

以下二個因為個人使用上比較無感...所以就單純列出功能說明/images/emoticon/emoticon47.gif

  • kube-controller-manager:

    • 節點控制器(Node Controller): 負責在節點出現故障時進行通知和回應
    • 任務控制器(Job controller): 監測代表一次性任務的 Job 對象,然後創建 Pods 來運行這些任務直至完成
    • 端點控制器(Endpoints Controller): 填充端點(Endpoints)物件(即加入 Service 與 Pod)
    • 服務帳戶和令牌控制器(Service Account & Token Controllers): 為新的命名空間創建預設帳戶和 API 訪問令牌
  • cloud-controller-manager

    • 節點控制器(Node Controller): 用於在節點終止回應后檢查雲供應商以確定節點是否已被刪除
    • 路由控制器(Route Controller): 用於在底層雲基礎架構中設置路由
    • 服務控制器(Service Controller): 用於創建、更新和刪除雲供應商負載均衡器

    -- 資料來源Kubernetes 元件

Node

簡單說,可以把node當成是一台主機,pod運行在node上面,k8s會透過Control Plane把pod調度至最適合的node上面,node在k8s是一個可隨時scale的元件,只要有設定auto-scaling的話,會根據資源使用率進來node的縮放,所以當服務loaing過大時,可以隨時加機器上去應付需求,真的超方便,實體主機就無法這樣子搞了。

而Node包含以下元件

  • kubelet:基於 PodSpec 來工作的。 每個 PodSpec 是一個描述 Pod 的 YAML 或 JSON 物件。 kubelet 接受通過各種機制(主要是通過apiserver)提供的一組PodSpec,並確保這些PodSpec中描述的容器處於運行狀態且運行狀況良好。 kubelet 不管理不是由 Kubernetes 創建的容器
  • kube-proxy:集群中每個節點上運行的網路代理, 實現 Kubernetes 服務(Service) 概念的一部分
  • Container Runtime:Kubernetes 支援多個容器運行環境: Docker、 containerd、CRI-O 以及任何實現Kubernetes CRI (容器運行環境介面)。

以GKE來說,GKE NODE VERSOIN 1.19後就DEFAULT使用containerd 的 Container-Optimized OS(cos_containerd),而不是使用DOCKER 的 Container-Optimized OS (cos) ,但是docker image還是可以正常的運作在cos_containerd上面。

-- 資料來源kubelet
-- 資料來源Container Runtime
-- 資料來源kube-proxy


上一篇
[DAY2]k8s在做什麼
下一篇
[DAY4]K8S裡面的小小兵-POD
系列文
k8s新手船長船難記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言